Python实战之小说下载神器(三)排行榜所有小说:最全热门小说合集,总有一款适合你,好多好多好多超赞的小说...(源码分享学习)

您所在的位置:网站首页 小说排行 小说 Python实战之小说下载神器(三)排行榜所有小说:最全热门小说合集,总有一款适合你,好多好多好多超赞的小说...(源码分享学习)

Python实战之小说下载神器(三)排行榜所有小说:最全热门小说合集,总有一款适合你,好多好多好多超赞的小说...(源码分享学习)

2023-03-04 20:52| 来源: 网络整理| 查看: 265

前言

这次的是一个系列内容

给大家讲解一下何一步一步实现一个完整的实战项目案例系列之 小说下载神器(三)(GUI界面化程序)

多线程采集小说下载、采集排行榜所有小说

哈喽!大家上午好啦,我是爱看小说的栗子同学。

所有文章完整的素材+源码都在👇👇

粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。

今天这一期就如开头写的内容一样,接着来学习小说下载,下一期就写搜索界面跟GUI界面

啦~下一期就是小说下载器的最后一篇文章。

好啦,话不多说直接开始今天的正题吧!

主要内容:用Python代码实现多线程方式采集小说以及采集排行榜所有小说内容。

正文 一、运行环境 

 本文用到的环境如下—— Python3、Pycharm社区版,第三方模块:requests等

部分自带的库只 要安装完 Python就可 以直接使用了需要安装 的库的话看教程下🎐

一般安装:pip install +模块名 镜像源安装:pip install -i https://pypi.douban.com/simple/+模块名 二、多线程采集小说

代码注释的很清楚的,对家可以看着学习。

1)主程序 """ # 导入数据请求模块 --> 第三方模块, 需要安装 import requests # 导入正则表达式模块 --> 内置模块, 不需要安装 import re # 导入数据解析模块 --> 第三方模块, 需要安装 import parsel # 导入文件操作模块 --> 内置模块, 不需要安装 import os # 导入线程池 import concurrent.futures def get_response(html_url): """ 发送请求函数 :param html_url: 请求链接 :return: response响应对象 """ # 模拟浏览器 headers 请求头 headers = { # user-agent 用户代理 表示浏览器基本身份信息 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' } response = requests.get(url=html_url, headers=headers) return response def get_list_url(html_url): """ 获取章节url/小说名 :param html_url: 小说目录页 :return: """ # 调用发送请求函数 html_data = get_response(html_url).text # 提取小说名字 name = re.findall('(.*?)', html_data)[0] # 提取章节url url_list = re.findall(' ', html_data) return name, url_list def get_content(html_url): """ 获取小说内容/小说标题 :param html_url: 小说章节url :return: """ # 调用发送请求函数 html_data = get_response(html_url).text # 提取标题 title = re.findall('(.*?)', html_data)[0] # 提取内容 content = re.findall('(.*?)

', html_data, re.S)[0].replace('', '\n') return title, content def save(name, title, content): """ 保存数据函数 :param name: 小说名 :param title: 章节名 :param content: 内容 :return: """ # 自动创建一个文件夹 file = f'{name}\\' if not os.path.exists(file): os.mkdir(file) with open(file + title + '.txt', mode='a', encoding='utf-8') as f: """ 第一章 标题 小说内容 第二章 标题 小说内容 """ # 写入内容 f.write(title) f.write('\n') f.write(content) f.write('\n') print(title, '已经保存') def main(home_url): # index_url = 'https://www.biqudu.net' + url title, content = get_content(html_url=home_url) save(name, title, content) if __name__ == '__main__': url = 'https://www.biqudu.net/1_1631/' name, url_list = get_list_url(html_url=url) exe = concurrent.futures.ThreadPoolExecutor(max_workers=7) for url in url_list: index_url = 'https://www.biqudu.net' + url exe.submit(main, index_url) exe.shutdown() # # 请求链接: 小说目录页 # list_url = 'https://www.biqudu.net/1_1631/' # # 模拟浏览器 headers 请求头 # headers = { # # user-agent 用户代理 表示浏览器基本身份信息 # 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' # } # # 发送请求 # html_data = requests.get(url=list_url, headers=headers).text # # 提取小说名字 # name = re.findall('(.*?)', html_data)[0] # # 自动创建一个文件夹 # file = f'{name}\\' # if not os.path.exists(file): # os.mkdir(file) # # # 提取章节url # url_list = re.findall(' ', html_data) # # for循环遍历 # for url in url_list: # index_url = 'https://www.biqudu.net' + url # print(index_url) # """ # 1. 发送请求, 模拟浏览器对于url地址发送请求 # 请求链接: https://www.biqudu.net/1_1631/3047505.html # 安装模块方法: # - win + R 输入cmd, 输入安装命令 pip install requests # - 在pycharm终端, 输入安装命令 # 模拟浏览器 headers 请求头: # 字典数据结构 # AttributeError: 'set' object has no attribute 'items' # 因为headers不是字典数据类型, 而是set集合 # """ # # # 请求链接 # # url = 'https://www.biqudu.net/1_1631/3047506.html' # # 模拟浏览器 headers 请求头 # headers = { # # user-agent 用户代理 表示浏览器基本身份信息 # 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' # } # # 发送请求 # response = requests.get(url=index_url, headers=headers) # # 响应对象, 表示请求成功 # print(response) # """ # 2. 获取数据, 获取服务器返回响应数据内容 # 开发者工具: response # response.text --> 获取响应文本数据 # 3. 解析数据, 提取我们想要的数据内容 # 标题/内容 # # re正则表达式: 是直接对于字符串数据进行解析 # re.findall('什么数据', '什么地方') --> 从什么地方, 去找什么数据 # .*? --> 可以匹配任意数据, 除了\n换行符 # # 提取标题 # title = re.findall('(.*?)', response.text)[0] # # 提取内容 # content = re.findall('(.*?)

', response.text, re.S)[0].replace('', '\n') # # css选择器: 根据标签属性提取数据 # .bookname h1::text # 类名为bookname下面h1标签里面文本 # get() --> 提取第一个标签数据内容 返回字符串 # getall() --> 提取多个数据, 返回列表 # # 提取标题 # title = selector.css('.bookname h1::text').get() # # 提取内容 # content = '\n'.join(selector.css('#content::text').getall()) # # xpath节点提取: 提取标签节点提取数据 # # """ # # 获取下来response.text , 转成可解析对象 # selector = parsel.Selector(response.text) # # 提取标题 # title = selector.xpath('//*[@class="bookname"]/h1/text()').get() # # 提取内容 # content = '\n'.join(selector.xpath('//*[@id="content"]/text()').getall()) # print(title) # # print(content) # # title '.txt' 文件格式 a 追加保存 encoding 编码格式 as 重命名 # with open(file + title + '.txt', mode='a', encoding='utf-8') as f: # """ # 第一章 标题 # 小说内容 # 第二章 标题 # 小说内容 # """ # # 写入内容 # f.write(title) # f.write('\n') # f.write(content) # f.write('\n') 2)效果展示

三、采集排行榜所有小说

下面我们采集玄幻榜单所有小说具体看是怎么操作的呢?🤔

主要是要获取所有小说id——

1)主程序

环境安装都是一样的方式,看最上面安装就可以,第三方库这里只是多了parsel库。

import requests import re import parsel import os def get_response(html_url): """ 发送请求函数 :param html_url: 请求链接 :return: response响应对象 """ # 模拟浏览器 headers 请求头 headers = { # user-agent 用户代理 表示浏览器基本身份信息 'user-agent': 'Mozilla/5.0 (Windows NT 10.0 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' } response = requests.get(url=html_url, headers=headers) return response def get_list_url(html_url): """ 获取章节url/小说名 :param html_url: 小说目录页 :return: """ # 调用发送请求函数 html_data = get_response(html_url).text # 提取小说名字 name = re.findall('(.*?)', html_data)[0] # 提取章节url url_list = re.findall(' ', html_data) return name, url_list def get_content(html_url): """ 获取小说内容/小说标题 :param html_url: 小说章节url :return: """ # 调用发送请求函数 html_data = get_response(html_url).text # 提取标题 title = re.findall('(.*?)', html_data)[0] # 提取内容 content = re.findall('(.*?)

', html_data, re.S)[0].replace('', '\n') return title, content def save(name, title, content): """ 保存数据函数 :param name: 小说名 :param title: 章节名 :param content: 内容 :return: """ # 自动创建一个文件夹 file = f'{name}\\' if not os.path.exists(file): os.mkdir(file) with open(file + title + '.txt', mode='a', encoding='utf-8') as f: """ 第一章 标题 小说内容 第二章 标题 小说内容 """ # 写入内容 f.write(title) f.write('\n') f.write(content) f.write('\n') print(title, '已经保存') def get_novel_id(html_url): """ 获取小说ID :param html_url: 某分类的链接 :return: """ # 调用发送请求函数 novel_data = get_response(html_url=html_url).text selector = parsel.Selector(novel_data) href = selector.css('.l .s2 a::attr(href)').getall() href = [i.replace('/', '') for i in href] return href def main(home_url): href = get_novel_id(html_url=home_url) for novel_id in href: novel_url = f'https://www.biqudu.net/{novel_id}/' name, url_list = get_list_url(html_url=novel_url) print(name, url_list) for url in url_list: index_url = 'https://www.biqudu.net' + url title, content = get_content(html_url=index_url) save(name, title, content) break if __name__ == '__main__': html_url = 'https://www.biqudu.net/biquge_1/' main(html_url) 2)效果展示

总结

好啦!今天的内容到这里就结束了哈,想看的60多本小说全部爬下来了,大家可以自己慢慢看

很久了~下一期这个系列内容就完结了,希望大家好好学一下哦!

✨完整的素材源码等:可以滴滴我吖!或者点击文末hao自取免费拿的哈~  🔨推荐往期文章——  🔨推荐往期文章——

项目1.0 小说下载神器(GUI界面)系列内容

Python实战之小说下载神器(一)看小说怎么能少了这款宝藏神器呢?全网小说书籍随便下,随便看,爆赞(你准备好了吗?)

项目1.1  小说下载神器(GUI界面)系列内容 Python实战之小说下载神器(二)整本小说下载:看小说不用这个程序,我实在替你感到可惜*(小说爱好者必备)

项目1.6  【Python实战】听书就用它了:海量资源随便听,内含几w书源,绝对精品哦~

项目1.8 【Python实战】海量表情包炫酷来袭,快来pick斗图新姿势吧~(超好玩儿)

🎁文章汇总——

Python文章合集 | (入门到实战、游戏、Turtle、案例等)

(文章汇总还有更多你案例等你来学习啦~源码找我即可免费!)    



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3